// 字符串相关校验 - 按照validator.js标准

// 是否只包含字母
export function isAlpha(str) {
  if (!str) return true
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

// 是否只包含字母和数字
export function isAlphanumeric(str) {
  if (!str) return true
  const reg = /^[A-Za-z0-9]+$/
  return reg.test(str)
}

// 是否只包含ASCII字符
export function isAscii(str) {
  if (!str) return true
  const reg = /^[\x00-\x7F]+$/
  return reg.test(str)
}

// 是否为Base64编码
export function isBase64(str) {
  if (!str) return true
  const reg = /^[A-Za-z0-9+/]*={0,2}$/
  return reg.test(str) && str.length % 4 === 0
}

// 是否为布尔值
export function isBoolean(str) {
  if (!str) return true
  return ['true', 'false', '1', '0'].includes(str.toLowerCase())
}

// 是否为邮箱
export function isEmail(str) {
  if (!str) return true
  const reg = /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/
  return reg.test(str)
}

// 是否为全小写
export function isLowercase(str) {
  if (!str) return true
  return str === str.toLowerCase()
}

// 是否为全大写
export function isUppercase(str) {
  if (!str) return true
  return str === str.toUpperCase()
}

// 字符串长度校验
export function isLength(str, options = {}) {
  if (!str) return true
  const { min = 0, max = Infinity } = options
  return str.length >= min && str.length <= max
}

// 是否只包含中文字符
export function isChineseOnly(str) {
  if (!str) return true
  const reg = /^[\u4e00-\u9fa5]+$/
  return reg.test(str)
}

// 是否包含中文字符
export function hasChinese(str) {
  if (!str) return true
  const reg = /[\u4e00-\u9fa5]+/
  return reg.test(str)
}

// 是否为账户名（不能以下划线开头或结尾，可包含中文、英文、数字、下划线）
export function isAccount(str) {
  if (!str) return true
  const reg = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$/
  return reg.test(str)
}

// 是否只包含汉字、英文、数字、下划线、短线
export function isChineseEnglishNumberDash(str) {
  if (!str) return true
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9_\-]+$/
  return reg.test(str)
}

// 是否为URL slug
export function isSlug(str) {
  if (!str) return true
  const reg = /^[a-z0-9]+(?:-[a-z0-9]+)*$/
  return reg.test(str)
}